package com.snack.shop.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.snack.shop.entity.Order;

import java.math.BigDecimal;

/**
 * 退款服务接口
 * 
 * @author 阿狄
 * @date 2025-11-13
 */
public interface RefundService {

    /**
     * 获取待审核退款列表（商家端）
     * @param current 当前页
     * @param size 每页大小
     * @return 待审核退款订单列表
     */
    Page<Order> getPendingRefunds(Integer current, Integer size);

    /**
     * 商家审核退款
     * @param orderId 订单ID
     * @param approved 是否同意（true-同意，false-拒绝）
     * @param compensationRate 补偿比例（代取订单且同意时必填，0.1-0.5）
     * @param rejectReason 拒绝原因（拒绝时必填）
     */
    void approveRefund(Long orderId, Boolean approved, BigDecimal compensationRate, String rejectReason);

    /**
     * 处理同意退款
     * @param order 订单对象
     * @param compensationRate 补偿比例（代取订单需要）
     */
    void processApprovedRefund(Order order, BigDecimal compensationRate);

    /**
     * 处理拒绝退款
     * @param order 订单对象
     * @param rejectReason 拒绝原因
     */
    void processRejectedRefund(Order order, String rejectReason);

    /**
     * 计算退款和补偿金额
     * @param order 订单对象
     * @param compensationRate 补偿比例
     * @return 数组：[退款金额, 补偿金额]
     */
    BigDecimal[] calculateRefundAmount(Order order, BigDecimal compensationRate);

    /**
     * 自动审核超时退款
     * 定时任务调用，处理超过指定时间未审核的退款申请
     */
    void autoApproveOverdueRefunds();

    /**
     * 获取已处理退款记录（商家端）
     * @param current 当前页
     * @param size 每页大小
     * @return 已处理退款订单列表
     */
    Page<Order> getProcessedRefunds(Integer current, Integer size);
}
